package com.zhoug.tmap;

import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.provider.Settings;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: zhoug
 * @Date: 2024-12-31
 * @Description:
 */
public class Utils {
    /**
     * 找到2个集合中的重复的数据,
     * 性能优化比嵌套遍历2个集合快很多
     *
     * @param list1
     * @param list2
     * @param <T>
     * @return 重复的数据集合(第二个集合中的数据)
     */
    public static <T> List<T> findSame(List<T> list1, List<T> list2) {
        //任意一个集合为空都没有重复的数据
        if (list1 != null && list2 != null && !list1.isEmpty() && !list2.isEmpty()) {
            List<T> same = new ArrayList<>();
            Map<T, Integer> map = new HashMap<>();
            //将list1元素放入map，计数1
            for (T item : list1) {
                map.put(item, 1);
            }
            //遍历list2集合，在map中查找list2的元素，有则+1，无则计数为1
            for (T item : list2) {
                Integer count = map.get(item);
                if (count != null) {
                    map.put(item, ++count);
                } else {
                    map.put(item, 1);
                }
            }
            //现在map集合里面，value为1的就是两个集合不同的元素，value为2或者大于2的就是两个集合相同的元素
            for (Map.Entry<T, Integer> entry : map.entrySet()) {
                if (entry.getValue() > 1) {
                    same.add(entry.getKey());
                }
            }
            return same;
        }
        return null;
    }


    public static int dpTopx(Context context, float dipValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue * scale + 0.5f);
    }

    /**
     * GPS定位是否打开
     *
     * @param context
     * @return
     */
    public static boolean isGpsOpen(final Context context) {
        return isGpsOpen((LocationManager) context.getSystemService(Context.LOCATION_SERVICE));
    }


    /**
     * GPS定位是否打开
     *
     * @return
     */
    public static boolean isGpsOpen(LocationManager locationManager) {
        if (locationManager == null) {
            return false;
        }
        // 通过GPS卫星定位，定位级别可以精确到街（通过24颗卫星定位，在室外和空旷的地方定位准确、速度快）
        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        // 通过WLAN或移动网络(3G/2G)确定的位置（也称作AGPS，辅助GPS定位。主要用于在室内或遮盖物（建筑群或茂密的深林等）密集的地方定位）
//        boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        return gps;
    }


    public static void openGps(Context context) {
        Intent gpsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        context.startActivity(gpsIntent);
    }

}
